Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Структура даних "Бінарне дерево пошуку"

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2007
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування

Частина тексту файла

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи № 5 з дисципліни: “Програмування” на тему: Структура даних „Бінарне дерево пошуку” Варіант 6 1. Мета роботи Навчитись працювати з структурою даних “Бінарне дерево пошуку ”. 2. Постановка задачі Побудувати бінарне дерево пошуку для послідовності чисел, що вводяться з клавіатури. Виконати обхід дерева у заданому порядку і підрахувати: кількість вершин дерева, що обраховується при проходженні дерева у прямому порядку; кількість листків дерева, що обраховується при проходженні дерева у зворотньому порядку; кількість вузлів, які мають тільки одного нащадка, що обраховується при проходженні дерева у симетричному порядку. Побудувати два бінарних дерева пошуку. Визначити, чи можна одне дерево одержати з іншого шляхом вилучення однієї вершини. 3. Алгоритм розв’язання задачі Ініціалізувати бінарне дерево пошуку№1 Вивести на екран рядок “Enter tree #1:” Вивести на екран рядок “Enter int element (0 - finish):” Ввести з клавіатури число x Якщо x≠0, то додати x в бінарне дерево пошуку№1 Якщо x≠0, то перейти до пункту 3 Роздрукувати бінарне дерево пошуку№1 Вивести на екран кількість вершин, листків, вузлів, які мають тільки одного нащадка, для бінарного дерева пошуку№1 Ініціалізувати бінарне дерево пошуку№2 Вивести на екран рядок “Enter tree #2:” Вивести на екран рядок “Enter int element (0 - finish):” Ввести з клавіатури число x Якщо x≠0, то додати x в бінарне дерево пошуку№2 Якщо x≠0, то перейти до пункту 11 Роздрукувати бінарне дерево пошуку№2 Вивести на екран кількість вершин, листків, вузлів, які мають тільки одного нащадка, для бінарного дерева пошуку№2 Якщо з бінарного дерева пошуку№1 можна видалити якусь вершину, і при цьому воно співпаде з бінарним деревом пошуку№2 або якщо з бінарного дерева пошуку№2 можна видалити якусь вершину, і при цьому воно співпаде з бінарним деревом пошуку№1, то вивести на екран рядок “Yes”, в іншому разі вивести на екран рядок “No” 4. Текст програми #include <stdio.h> #include "pBTREE.c" void MakeCopyTree(binary_tree rootF,binary_tree * rootT); void DestroyTree(binary_tree root); int NumPeaks(binary_tree root, binary_tree knot){ int num=0; if (knot) { if (WhoFather(root,knot)&&(WhoLeft(knot)||WhoRight(knot))) num++; num+=NumPeaks(root,WhoLeft(knot)); num+=NumPeaks(root,WhoRight(knot)); }; return num; } int NumLeafs(binary_tree knot){ int num=0; if (knot){ num+=NumLeafs(WhoLeft(knot)); num+=NumLeafs(WhoRight(knot)); if ((!WhoLeft(knot))&(!WhoRight(knot))) num++; } return num; } int NumElem(binary_tree knot){ int num=0; if (knot){ num+=NumElem(WhoLeft(knot)); num++; num+=NumElem(WhoRight(knot)); } return num; } int GoSym(binary_tree knot){ int num=0; if (knot){ num+=GoSym(WhoLeft(knot)); if (NumElem(knot)==2) num++; num+=GoSym(WhoRight(knot)); } return num; } int TreesEq(binary_tree root1,binary_tree root2){ if ((!root1)&&(!root2)) return 1; if ((root1)&&(root2)){ if (root1->data!=root2->data) return 0; if (!TreesEq(WhoLeft(root1),WhoLeft(root2))) return 0; if (!TreesEq(WhoRight(root1),WhoRight(root2))) return 0; return 1; } return 0; } int Test1(binary_tree root1,binary_tree root2,binary_tree knot){ int data1,ret; binary_tree btt; if (knot){ if (WhoFather(root1,knot)&&(WhoLeft(knot)||WhoRight(knot))){ MakeCopyTree(root1,&btt); data1=knot->data; DeleteSearchTree(&btt, data1); ret=0; if (TreesEq(btt,root2)) ret=1; DestroyTree(btt); if (ret) return 1; } if (Test1(root1,root2,WhoLeft(knot))) return 1; if (Test1(root1,root2,WhoRight(knot))) return 1; } return 0; } void DestroyTree(binary_tree root){ if (root){ DestroyTree(WhoLeft(root)); DestroyTree(WhoRight(root)); free(root); } } void MakeCopyTreeH(binary_tree rootF,binary_tree * rootT){ if (rootF){ *rootT=MakeNode(rootF->data); MakeCopyTreeH(WhoLeft(rootF),&((*rootT)->leftson)); MakeCopyTreeH(WhoRight(rootF),&((*...
Антиботан аватар за замовчуванням

06.03.2013 23:03

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини